--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Node / ReticulumProjects / MeshChatX.git / files / meshchatx / src / frontend / js / KeyboardShortcuts.js
Displaying Raw • Download
meshchatx/src/frontend/js/KeyboardShortcuts.js e5756d7ab065475a18acdcafc008a767fcff87e0 (e5756d7a) Text, 7.78 KB
Tff7b72import Te6edf3GlobalEmitter Tff7b72from Ta5d6ff"./GlobalEmitter"Tb4b4b4;
Tff7b72import Te6edf3WebSocketConnection Tff7b72from Ta5d6ff"./WebSocketConnection"Tb4b4b4;
Tff7b72class Te6edf3KeyboardShortcuts Tb4b4b4{
Tff7b72constructorTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3shortcuts Tff7b72= Tff7b72thisTb4b4b4.Te6edf3getDefaultShortcutsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3activeKeys Tff7b72= Tff7b72new Tffa657SetTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3isRecording Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3onRecordCallback Tff7b72= Tff7b72nullTb4b4b4;
Tffa657windowTb4b4b4.Te6edf3addEventListenerTb4b4b4(Ta5d6ff"keydown"Tb4b4b4, Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4=> Tff7b72thisTb4b4b4.Te6edf3handleKeyDownTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4)Tb4b4b4;
Tffa657windowTb4b4b4.Te6edf3addEventListenerTb4b4b4(Ta5d6ff"keyup"Tb4b4b4, Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4=> Tff7b72thisTb4b4b4.Te6edf3handleKeyUpTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4)Tb4b4b4;
Tffa657windowTb4b4b4.Te6edf3addEventListenerTb4b4b4(Ta5d6ff"blur"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tff7b72thisTb4b4b4.Te6edf3activeKeysTb4b4b4.Te6edf3clearTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tffa657windowTb4b4b4.Te6edf3addEventListenerTb4b4b4(Ta5d6ff"mousedown"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tff7b72thisTb4b4b4.Te6edf3activeKeysTb4b4b4.Te6edf3clearTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4; T8b949e// Clear on mouse click to prevent stuck modifiers
Tb4b4b4}
Te6edf3getDefaultShortcutsTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Tb4b4b4[
Tb4b4b4{ Te6edf3actionTff7b72: Ta5d6ff"nav_messages"Tb4b4b4, Te6edf3keysTff7b72: Tb4b4b4[Ta5d6ff"alt"Tb4b4b4, Ta5d6ff"1"Tb4b4b4]Tb4b4b4, Te6edf3descriptionTff7b72: Ta5d6ff"Go to Messages" Tb4b4b4}Tb4b4b4,
Tb4b4b4{ Te6edf3actionTff7b72: Ta5d6ff"nav_nomad"Tb4b4b4, Te6edf3keysTff7b72: Tb4b4b4[Ta5d6ff"alt"Tb4b4b4, Ta5d6ff"2"Tb4b4b4]Tb4b4b4, Te6edf3descriptionTff7b72: Ta5d6ff"Go to Nomad Network" Tb4b4b4}Tb4b4b4,
Tb4b4b4{ Te6edf3actionTff7b72: Ta5d6ff"nav_map"Tb4b4b4, Te6edf3keysTff7b72: Tb4b4b4[Ta5d6ff"alt"Tb4b4b4, Ta5d6ff"3"Tb4b4b4]Tb4b4b4, Te6edf3descriptionTff7b72: Ta5d6ff"Go to Map" Tb4b4b4}Tb4b4b4,
Tb4b4b4{ Te6edf3actionTff7b72: Ta5d6ff"nav_paper"Tb4b4b4, Te6edf3keysTff7b72: Tb4b4b4[Ta5d6ff"alt"Tb4b4b4, Ta5d6ff"p"Tb4b4b4]Tb4b4b4, Te6edf3descriptionTff7b72: Ta5d6ff"Go to Paper Message Generator" Tb4b4b4}Tb4b4b4,
Tb4b4b4{ Te6edf3actionTff7b72: Ta5d6ff"nav_archives"Tb4b4b4, Te6edf3keysTff7b72: Tb4b4b4[Ta5d6ff"alt"Tb4b4b4, Ta5d6ff"4"Tb4b4b4]Tb4b4b4, Te6edf3descriptionTff7b72: Ta5d6ff"Go to Archives" Tb4b4b4}Tb4b4b4,
Tb4b4b4{ Te6edf3actionTff7b72: Ta5d6ff"nav_calls"Tb4b4b4, Te6edf3keysTff7b72: Tb4b4b4[Ta5d6ff"alt"Tb4b4b4, Ta5d6ff"5"Tb4b4b4]Tb4b4b4, Te6edf3descriptionTff7b72: Ta5d6ff"Go to Calls" Tb4b4b4}Tb4b4b4,
Tb4b4b4{ Te6edf3actionTff7b72: Ta5d6ff"nav_settings"Tb4b4b4, Te6edf3keysTff7b72: Tb4b4b4[Ta5d6ff"alt"Tb4b4b4, Ta5d6ff"s"Tb4b4b4]Tb4b4b4, Te6edf3descriptionTff7b72: Ta5d6ff"Go to Settings" Tb4b4b4}Tb4b4b4,
Tb4b4b4{ Te6edf3actionTff7b72: Ta5d6ff"compose_message"Tb4b4b4, Te6edf3keysTff7b72: Tb4b4b4[Ta5d6ff"alt"Tb4b4b4, Ta5d6ff"n"Tb4b4b4]Tb4b4b4, Te6edf3descriptionTff7b72: Ta5d6ff"Compose New Message" Tb4b4b4}Tb4b4b4,
Tb4b4b4{ Te6edf3actionTff7b72: Ta5d6ff"sync_messages"Tb4b4b4, Te6edf3keysTff7b72: Tb4b4b4[Ta5d6ff"alt"Tb4b4b4, Ta5d6ff"r"Tb4b4b4]Tb4b4b4, Te6edf3descriptionTff7b72: Ta5d6ff"Sync Messages" Tb4b4b4}Tb4b4b4,
Tb4b4b4{ Te6edf3actionTff7b72: Ta5d6ff"command_palette"Tb4b4b4, Te6edf3keysTff7b72: Tb4b4b4[Ta5d6ff"control"Tb4b4b4, Ta5d6ff"k"Tb4b4b4]Tb4b4b4, Te6edf3descriptionTff7b72: Ta5d6ff"Open Command Palette" Tb4b4b4}Tb4b4b4,
Tb4b4b4{ Te6edf3actionTff7b72: Ta5d6ff"toggle_sidebar"Tb4b4b4, Te6edf3keysTff7b72: Tb4b4b4[Ta5d6ff"control"Tb4b4b4, Ta5d6ff"b"Tb4b4b4]Tb4b4b4, Te6edf3descriptionTff7b72: Ta5d6ff"Toggle Sidebar" Tb4b4b4}Tb4b4b4,
Tb4b4b4]Tb4b4b4;
Tb4b4b4}
Te6edf3handleKeyDownTb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
T8b949e// Always update modifier states regardless of other conditions
Tff7b72thisTb4b4b4.Te6edf3updateModifiersTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3key Tff7b72= Te6edf3eTb4b4b4.Te6edf3keyTb4b4b4.Te6edf3toLowerCaseTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Tb4b4b4[Ta5d6ff"control"Tb4b4b4, Ta5d6ff"alt"Tb4b4b4, Ta5d6ff"shift"Tb4b4b4, Ta5d6ff"meta"Tb4b4b4]Tb4b4b4.Te6edf3includesTb4b4b4(Te6edf3keyTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3activeKeysTb4b4b4.Te6edf3addTb4b4b4(Te6edf3keyTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3isRecordingTb4b4b4) Tb4b4b4{
Te6edf3eTb4b4b4.Te6edf3preventDefaultTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3onRecordCallbackTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3onRecordCallbackTb4b4b4(Tffa657ArrayTb4b4b4.Tff7b72fromTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3activeKeysTb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72returnTb4b4b4;
Tb4b4b4}
T8b949e// Check for matches
Tff7b72for Tb4b4b4(Tff7b72const Te6edf3shortcut Tff7b72of Tff7b72thisTb4b4b4.Te6edf3shortcutsTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3matchesTb4b4b4(Te6edf3shortcutTb4b4b4.Te6edf3keysTb4b4b4, Te6edf3eTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3shortcutTb4b4b4.Te6edf3action Tff7b72=== Ta5d6ff"command_palette"Tb4b4b4) Tb4b4b4{
Tff7b72continueTb4b4b4;
Tb4b4b4}
T8b949e// Check if we should ignore because we're in an input
Tff7b72const Te6edf3isInput Tff7b72=
Tb4b4b4[Ta5d6ff"INPUT"Tb4b4b4, Ta5d6ff"TEXTAREA"Tb4b4b4]Tb4b4b4.Te6edf3includesTb4b4b4(Tffa657documentTb4b4b4.Te6edf3activeElementTb4b4b4.Te6edf3tagNameTb4b4b4) Tff7b72||
Tffa657documentTb4b4b4.Te6edf3activeElementTb4b4b4.Te6edf3isContentEditable Tff7b72||
Tffa657documentTb4b4b4.Te6edf3activeElementTb4b4b4.Te6edf3closestTb4b4b4(Ta5d6ff".v-input"Tb4b4b4)Tb4b4b4; T8b949e// Better Vuetify detection
Tff7b72const Te6edf3hasModifier Tff7b72= Te6edf3shortcutTb4b4b4.Te6edf3keysTb4b4b4.Te6edf3someTb4b4b4(Tb4b4b4(Te6edf3kTb4b4b4) Tb4b4b4=> Tb4b4b4[Ta5d6ff"control"Tb4b4b4, Ta5d6ff"alt"Tb4b4b4, Ta5d6ff"meta"Tb4b4b4]Tb4b4b4.Te6edf3includesTb4b4b4(Te6edf3kTb4b4b4)Tb4b4b4)Tb4b4b4;
T8b949e// If it's an input, only allow shortcuts with modifiers (like Alt+1, Ctrl+K)
T8b949e// but ignore simple keys if they're not explicitly allowed in inputs
Tff7b72if Tb4b4b4(Te6edf3isInput Tff7b72&& Tff7b72!Te6edf3hasModifierTb4b4b4) Tb4b4b4{
Tff7b72continueTb4b4b4;
Tb4b4b4}
T8b949e// Specifically allow navigation shortcuts (Alt+number) even in inputs
T8b949e// as they don't usually conflict with typing (unless using special chars)
Te6edf3eTb4b4b4.Te6edf3preventDefaultTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3eTb4b4b4.Te6edf3stopPropagationTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3executeActionTb4b4b4(Te6edf3shortcutTb4b4b4.Te6edf3actionTb4b4b4)Tb4b4b4;
Tff7b72breakTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Te6edf3updateModifiersTb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3eTb4b4b4.Te6edf3ctrlKeyTb4b4b4) Tff7b72thisTb4b4b4.Te6edf3activeKeysTb4b4b4.Te6edf3addTb4b4b4(Ta5d6ff"control"Tb4b4b4)Tb4b4b4;
Tff7b72else Tff7b72if Tb4b4b4(Tff7b72!Tff7b72thisTb4b4b4.Te6edf3isRecordingTb4b4b4) Tff7b72thisTb4b4b4.Te6edf3activeKeysTb4b4b4.Tff7b72deleteTb4b4b4(Ta5d6ff"control"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3eTb4b4b4.Te6edf3altKeyTb4b4b4) Tff7b72thisTb4b4b4.Te6edf3activeKeysTb4b4b4.Te6edf3addTb4b4b4(Ta5d6ff"alt"Tb4b4b4)Tb4b4b4;
Tff7b72else Tff7b72if Tb4b4b4(Tff7b72!Tff7b72thisTb4b4b4.Te6edf3isRecordingTb4b4b4) Tff7b72thisTb4b4b4.Te6edf3activeKeysTb4b4b4.Tff7b72deleteTb4b4b4(Ta5d6ff"alt"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3eTb4b4b4.Te6edf3shiftKeyTb4b4b4) Tff7b72thisTb4b4b4.Te6edf3activeKeysTb4b4b4.Te6edf3addTb4b4b4(Ta5d6ff"shift"Tb4b4b4)Tb4b4b4;
Tff7b72else Tff7b72if Tb4b4b4(Tff7b72!Tff7b72thisTb4b4b4.Te6edf3isRecordingTb4b4b4) Tff7b72thisTb4b4b4.Te6edf3activeKeysTb4b4b4.Tff7b72deleteTb4b4b4(Ta5d6ff"shift"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3eTb4b4b4.Te6edf3metaKeyTb4b4b4) Tff7b72thisTb4b4b4.Te6edf3activeKeysTb4b4b4.Te6edf3addTb4b4b4(Ta5d6ff"meta"Tb4b4b4)Tb4b4b4;
Tff7b72else Tff7b72if Tb4b4b4(Tff7b72!Tff7b72thisTb4b4b4.Te6edf3isRecordingTb4b4b4) Tff7b72thisTb4b4b4.Te6edf3activeKeysTb4b4b4.Tff7b72deleteTb4b4b4(Ta5d6ff"meta"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3handleKeyUpTb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3key Tff7b72= Te6edf3eTb4b4b4.Te6edf3keyTb4b4b4.Te6edf3toLowerCaseTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3activeKeysTb4b4b4.Tff7b72deleteTb4b4b4(Te6edf3keyTb4b4b4)Tb4b4b4;
T8b949e// Sync modifiers on keyup
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3eTb4b4b4.Te6edf3ctrlKeyTb4b4b4) Tff7b72thisTb4b4b4.Te6edf3activeKeysTb4b4b4.Tff7b72deleteTb4b4b4(Ta5d6ff"control"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3eTb4b4b4.Te6edf3altKeyTb4b4b4) Tff7b72thisTb4b4b4.Te6edf3activeKeysTb4b4b4.Tff7b72deleteTb4b4b4(Ta5d6ff"alt"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3eTb4b4b4.Te6edf3shiftKeyTb4b4b4) Tff7b72thisTb4b4b4.Te6edf3activeKeysTb4b4b4.Tff7b72deleteTb4b4b4(Ta5d6ff"shift"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3eTb4b4b4.Te6edf3metaKeyTb4b4b4) Tff7b72thisTb4b4b4.Te6edf3activeKeysTb4b4b4.Tff7b72deleteTb4b4b4(Ta5d6ff"meta"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3matchesTb4b4b4(Te6edf3shortcutKeysTb4b4b4, Te6edf3eTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3shortcutKeys Tff7b72|| Te6edf3shortcutKeysTb4b4b4.Te6edf3length Tff7b72=== T79c0ff0Tb4b4b4) Tff7b72return Tff7b72falseTb4b4b4;
T8b949e// Check modifiers using event properties (most reliable in browsers)
Tff7b72const Te6edf3hasControl Tff7b72= Te6edf3shortcutKeysTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"control"Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3hasAlt Tff7b72= Te6edf3shortcutKeysTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"alt"Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3hasShift Tff7b72= Te6edf3shortcutKeysTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"shift"Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3hasMeta Tff7b72= Te6edf3shortcutKeysTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"meta"Tb4b4b4)Tb4b4b4;
T8b949e// Browsers handle Alt and Control differently on different OSs.
T8b949e// We use a normalized approach here.
Tff7b72const Te6edf3isControlPressed Tff7b72= Te6edf3eTb4b4b4.Te6edf3ctrlKeyTb4b4b4;
Tff7b72const Te6edf3isAltPressed Tff7b72= Te6edf3eTb4b4b4.Te6edf3altKeyTb4b4b4;
Tff7b72const Te6edf3isShiftPressed Tff7b72= Te6edf3eTb4b4b4.Te6edf3shiftKeyTb4b4b4;
Tff7b72const Te6edf3isMetaPressed Tff7b72= Te6edf3eTb4b4b4.Te6edf3metaKeyTb4b4b4;
Tff7b72const Te6edf3isMac Tff7b72= Te6edf3navigatorTb4b4b4.Te6edf3platformTb4b4b4.Te6edf3toUpperCaseTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3indexOfTb4b4b4(Ta5d6ff"MAC"Tb4b4b4) Tff7b72>= T79c0ff0Tb4b4b4;
Tff7b72const Te6edf3ctrlMatch Tff7b72= Te6edf3hasControl
Tff7b72? Te6edf3isControlPressed Tff7b72|| Tb4b4b4(Te6edf3isMac Tff7b72&& Te6edf3isMetaPressedTb4b4b4)
Tff7b72: Tff7b72!Te6edf3isControlPressed Tff7b72&& Tff7b72!Tb4b4b4(Te6edf3isMac Tff7b72&& Te6edf3isMetaPressedTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3ctrlMatchTb4b4b4) Tff7b72return Tff7b72falseTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3isAltPressed Tff7b72!== Te6edf3hasAltTb4b4b4) Tff7b72return Tff7b72falseTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3isShiftPressed Tff7b72!== Te6edf3hasShiftTb4b4b4) Tff7b72return Tff7b72falseTb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3isMac Tff7b72&& Te6edf3isMetaPressed Tff7b72!== Te6edf3hasMetaTb4b4b4) Tff7b72return Tff7b72falseTb4b4b4;
T8b949e// Find the non-modifier key in the shortcut
Tff7b72const Te6edf3mainKey Tff7b72= Te6edf3shortcutKeysTb4b4b4.Te6edf3findTb4b4b4(Tb4b4b4(Te6edf3kTb4b4b4) Tb4b4b4=> Tff7b72!Tb4b4b4[Ta5d6ff"control"Tb4b4b4, Ta5d6ff"alt"Tb4b4b4, Ta5d6ff"shift"Tb4b4b4, Ta5d6ff"meta"Tb4b4b4]Tb4b4b4.Te6edf3includesTb4b4b4(Te6edf3kTb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3mainKeyTb4b4b4) Tff7b72return Tff7b72trueTb4b4b4; T8b949e// Modifier-only shortcut (rare but possible)
Tff7b72const Te6edf3pressedKey Tff7b72= Te6edf3eTb4b4b4.Te6edf3keyTb4b4b4.Te6edf3toLowerCaseTb4b4b4(Tb4b4b4)Tb4b4b4;
T8b949e// Direct key match
Tff7b72if Tb4b4b4(Te6edf3pressedKey Tff7b72=== Te6edf3mainKeyTb4b4b4.Te6edf3toLowerCaseTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72return Tff7b72trueTb4b4b4;
T8b949e// Layout independence: check e.code as well (handles Alt+key layout changes)
T8b949e// e.g. Alt+1 might be captured as Digit1 regardless of layout
Tff7b72const Te6edf3codeMatch Tff7b72=
Te6edf3eTb4b4b4.Te6edf3code Tff7b72=== Ta5d6ff`Ta5d6ffDigitTffd700${Te6edf3mainKeyTffd700}Ta5d6ff` Tff7b72||
Te6edf3eTb4b4b4.Te6edf3code Tff7b72=== Ta5d6ff`Ta5d6ffKeyTffd700${Te6edf3mainKeyTb4b4b4.Te6edf3toUpperCaseTb4b4b4(Tb4b4b4)Tffd700}Ta5d6ff` Tff7b72||
Te6edf3eTb4b4b4.Te6edf3code Tff7b72=== Te6edf3mainKeyTb4b4b4.Te6edf3toUpperCaseTb4b4b4(Tb4b4b4)Tb4b4b4; T8b949e// For keys like 'Enter', 'Escape'
Tff7b72if Tb4b4b4(Te6edf3codeMatchTb4b4b4) Tff7b72return Tff7b72trueTb4b4b4;
Tff7b72return Tff7b72falseTb4b4b4;
Tb4b4b4}
Te6edf3executeActionTb4b4b4(Te6edf3actionTb4b4b4) Tb4b4b4{
Te6edf3GlobalEmitterTb4b4b4.Te6edf3emitTb4b4b4(Ta5d6ff"keyboard-shortcut"Tb4b4b4, Te6edf3actionTb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3setShortcutsTb4b4b4(Te6edf3shortcutsTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3defaults Tff7b72= Tff7b72thisTb4b4b4.Te6edf3getDefaultShortcutsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Tffa657ArrayTb4b4b4.Te6edf3isArrayTb4b4b4(Te6edf3shortcutsTb4b4b4) Tff7b72|| Te6edf3shortcutsTb4b4b4.Te6edf3length Tff7b72=== T79c0ff0Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3shortcuts Tff7b72= Te6edf3defaultsTb4b4b4.Te6edf3mapTb4b4b4(Tb4b4b4(Te6edf3dTb4b4b4) Tb4b4b4=> Tb4b4b4(Tb4b4b4{ Tb4b4b4...Te6edf3d Tb4b4b4}Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3shortcuts Tff7b72= Te6edf3shortcutsTb4b4b4.Te6edf3mapTb4b4b4(Tb4b4b4(Te6edf3sTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3def Tff7b72= Te6edf3defaultsTb4b4b4.Te6edf3findTb4b4b4(Tb4b4b4(Te6edf3dTb4b4b4) Tb4b4b4=> Te6edf3dTb4b4b4.Te6edf3action Tff7b72=== Te6edf3sTb4b4b4.Te6edf3actionTb4b4b4)Tb4b4b4;
Tff7b72return Tb4b4b4{
Tb4b4b4...Te6edf3sTb4b4b4,
Te6edf3descriptionTff7b72: Te6edf3def Tff7b72? Te6edf3defTb4b4b4.Te6edf3description Tff7b72: Te6edf3sTb4b4b4.Te6edf3actionTb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3startRecordingTb4b4b4(Te6edf3callbackTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3isRecording Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3onRecordCallback Tff7b72= Te6edf3callbackTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3activeKeysTb4b4b4.Te6edf3clearTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3stopRecordingTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3isRecording Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3onRecordCallback Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3activeKeysTb4b4b4.Te6edf3clearTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72async Te6edf3saveShortcutTb4b4b4(Te6edf3actionTb4b4b4, Te6edf3keysTb4b4b4) Tb4b4b4{
Te6edf3WebSocketConnectionTb4b4b4.Te6edf3sendTb4b4b4(
Tffa657JSONTb4b4b4.Te6edf3stringifyTb4b4b4(Tb4b4b4{
Te6edf3typeTff7b72: Ta5d6ff"keyboard_shortcuts.set"Tb4b4b4,
Te6edf3actionTff7b72: Te6edf3actionTb4b4b4,
Te6edf3keysTff7b72: Te6edf3keysTb4b4b4,
Tb4b4b4}Tb4b4b4)
Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72async Te6edf3deleteShortcutTb4b4b4(Te6edf3actionTb4b4b4) Tb4b4b4{
Te6edf3WebSocketConnectionTb4b4b4.Te6edf3sendTb4b4b4(
Tffa657JSONTb4b4b4.Te6edf3stringifyTb4b4b4(Tb4b4b4{
Te6edf3typeTff7b72: Ta5d6ff"keyboard_shortcuts.delete"Tb4b4b4,
Te6edf3actionTff7b72: Te6edf3actionTb4b4b4,
Tb4b4b4}Tb4b4b4)
Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72export Tff7b72default Tff7b72new Te6edf3KeyboardShortcutsTb4b4b4(Tb4b4b4)Tb4b4b4;
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────